Instant
This crate is no longer maintained. Please consider creating a fork or using web-time
instead. Or reach out if
you are interested in taking over its maintenance.
If you call std::time::Instant::now()
on a WASM platform, it will panic. This crate provides a partial
replacement for std::time::Instant
that works on WASM too. This defines the type instant::Instant
which is:
- A struct emulating the behavior of std::time::Instant if you are targeting
wasm32-unknown-unknown
orwasm32-unknown-asmjs
and you enabled either thestdweb
or thewasm-bindgen
feature. This emulation is based on the javascriptperformance.now()
function. - A type alias for
std::time::Instant
otherwise.
Note that even if the stdweb or wasm-bindgen feature is enabled, this crate will continue to rely on std::time::Instant
as long as you are not targeting wasm32. This allows for portable code that will work on both native and WASM platforms.
This crate also exports the function instant::now()
which returns a representation of the current time as an f64
, expressed in milliseconds, in a platform-agnostic way. instant::now()
will either:
- Call
performance.now()
when compiling for a WASM platform with the features stdweb or wasm-bindgen enabled, or using a custom javascript function. - Return the time elapsed since the Unix Epoch on native, non-WASM platforms.
Note: The old feature, now
, has been deprecated. instant::now()
is always exported and the now
feature flag no longer has any effect. It remains listed in Cargo.toml
to avoid introducing breaking changes and may be removed in future versions.
Examples
Using instant
for a native platform.
Cargo.toml:
[]
= "0.1"
main.rs:
Using instant
for a WASM platform.
This example shows the use of the stdweb
feature. It would be similar with wasm-bindgen
.
Cargo.toml:
[]
= { = "0.1", = [ "stdweb" ] }
main.rs:
Using instant
for a WASM platform where performance.now()
is not available.
This example shows the use of the inaccurate
feature.
Cargo.toml:
[]
= { = "0.1", = [ "wasm-bindgen", "inaccurate" ] }
main.rs:
Using instant
for any platform enabling a feature transitively.
Cargo.toml:
[]
= [ "instant/stdweb" ]
= [ "instant/wasm-bindgen" ]
[]
= "0.1"
lib.rs:
Using instant::now()
Cargo.toml:
[]
= [ "instant/stdweb" ]
= [ "instant/wasm-bindgen" ]
[]
= "0.1"
lib.rs:
Using the feature now
without stdweb
or wasm-bindgen
.
Cargo.toml:
[]
= "0.1"
lib.rs:
javascript WASM bindings file: